package com.example.makerspace.mapper;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.example.makerspace.model.ApplicationStatus;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

public class ApplicationStatusHandler extends BaseTypeHandler<List<ApplicationStatus>> {
    /**
     * 这个是set方法，可以简单理解成javaType转化成jdbcType
     * 在insert和update的时候触发
     */
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int columnIndex, List<ApplicationStatus> stringList, JdbcType jdbcType) throws SQLException {
        // 转化成String存入数据库
        JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(stringList));
        String jsonString = jsonArray.toJSONString();
        preparedStatement.setString(columnIndex, jsonString);
    }

    /**
     * 这个是get方法，可以简单理解成jdbcType转化成javaType
     * 在select的时候触发
     */
    @Override
    public List<ApplicationStatus> getNullableResult(ResultSet resultSet, String columnName) throws SQLException {
        String string = resultSet.getString(columnName);
        return JSON.parseArray(string, ApplicationStatus.class);
    }


    /**
     * 重载版本
     * 根据下标位置查
     */
    @Override
    public List<ApplicationStatus> getNullableResult(ResultSet resultSet, int columnIndex) throws SQLException {
        String string = resultSet.getString(columnIndex);
        return JSON.parseArray(string, ApplicationStatus.class);
    }

    /**
     * 重载版本
     * 根据下标位置查
     */
    @Override
    public List<ApplicationStatus> getNullableResult(CallableStatement callableStatement, int columnIndex) throws SQLException {
        String string = callableStatement.getString(columnIndex);
        return JSON.parseArray(string, ApplicationStatus.class);
    }
}
